var _ = require("lodash");
// _.pull(array, [values])
// 移除数组array中所有和给定值相等的元素，使用SameValueZero 进行全等比较
// 这个方法会改变原数组，without也是移除指定的元素，但是不回修改原数组，而是返回一个新数组

let arr = [1, 2, 3, 1, 2, 3];
let a = _.pull(arr, 2, 3);
// console.log(a);

let brr = [
  { name: "tom", age: "18" },
  { name: "tom2", age: "28" },
  { name: "tom3", age: "38" },
];
// 这个方法不适合对象格式的数据
let b = _.pull(brr, { name: "tom3", age: "38" });
// console.log(b);

// _.pullAll(array, values)
// 这个方法类似_.pull，区别是这个方法接收一个要移除值的数组
// 唯一的区别就是他的参数是一个数组
let c = _.pull(arr, [2, 3]);
// console.log(c);

// _.pullAllBy(array, values, [iteratee=_.identity])
// array (Array): 要修改的数组。
// values (Array): 要移除值的数组。
// [iteratee=_.identity] (Array|Function|Object|string): iteratee（迭代器）调用每个元素
// 跟pull方法相似，但是接收一个迭代函数，调用这个函数对array和values的每个值
// 都进行一次运算，生成新的值组成新的数组，然后根据新的数组进行数据的对比和删除
let brr2 = [
  { name: "tom4", age: "48" },
  { name: "tom2", age: "28" },
  { name: "tom5", age: "58" },
];

let d = _.pullAllBy(brr, brr2, "name");
console.log(d);
